package cate.game.res.lubiitem;

import cate.common.table.res.lubiitem.LubiItemBaseRow;
import cate.common.table.res.lubiitem.LubiItemVipRow;
import cate.common.util.GameResult;
import cate.game.res.MixResAdder;
import cate.game.res.lubiitem.msg.LubiItemDataResp;
import cate.game.role.Role;
import cate.game.role.RoleDependent;
import cate.game.role.bag.prop.Prop;
import easy.java.dev.note.NoteField;
import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.Map;

public class LubiItem extends RoleDependent {
    @NoteField(value = "礼包开启时间<tid, 开启时间>", detail = "每种tid的礼包，一天只能开一次")
    public Map<Integer, Long> itemsUseTimes;

    @NoteField(value = "礼包获得时间", detail = "默认会同时存在多个相同tid的礼包")
    public Map<String, Long> itemsGetTimes;

    @Override
    public void initialize(Role role) {
        super.initialize(role);
        if (itemsUseTimes == null) {
            itemsUseTimes = new HashMap<>();
        }
        if (itemsGetTimes == null) {
            itemsGetTimes = new HashMap<>();
        }
    }

    public void addLubiItem(Prop item) {
        itemsGetTimes.put(item.uid, System.currentTimeMillis());
        noticeUpdate();
    }

    public GameResult<Void> use(String uid) {
        GameResult<Void> r = new GameResult<>();
        if (StringUtils.isBlank(uid)) {
            return r.fail("错误的道具id");
        }
        if (!itemsGetTimes.containsKey(uid)) {
            return r.fail("您不能使用这个道具噢");
        }
        Prop prop = role.getBag().prop.getItem(uid);
        if (prop == null) {
            return r.fail("您没有该道具噢");
        }
//        long now = System.currentTimeMillis();
//        if (itemsUseTimes.containsKey(prop.tid) && TimeTool.getDistanceDays(now, itemsUseTimes.get(prop.tid)) <= 1) {
//            return r.fail("您今天已经开过拉，请明天再来");
//        }
        LubiItemBaseRow baseRow = role.getGame().table.lubiItem.base.getItemRow(prop.tid);
        if (baseRow == null) {
            return r.fail("您不能使用这个道具噢");
        }
//        if (TimeTool.getDistanceDays(itemsGetTimes.get(uid), now) < baseRow.value - 1) {
//            return r.fail("未达到使用条件");
//        }
        LubiItemVipRow vipRow = role.getGame().table.lubiItem.vip.getItemRow(role.getBase().vip, prop.tid);
        if (vipRow == null) {
            return r.fail("您不能使用这个道具噢");
        }
        role.getBag().prop.removeItem(uid, null);
//        itemsUseTimes.put(prop.tid, now);
        itemsGetTimes.remove(uid);
        new MixResAdder()
                .setRes(vipRow.rewardStr)
                .setSendMailWhenFull(true)
                .setDialogReward(true)
                .exe(role);
        noticeUpdate();
        return r;
    }

    public void noticeUpdate() {
        role.sendNow(new LubiItemDataResp(this));
    }
}
